<?php
/**
 * 選手選択コントローラクラスモジュール
 * 選択した学年に連動して選手選択リストを表示する
 */
require_once dirname(__FILE__) . '/../Components.php';
require_once dirname(__FILE__) . '/Mapper.php';
require_once dirname(__FILE__) . '/gakunen.php';
require_once dirname(__FILE__) . '/member.php';
require_once 'Smarty/Components/displayswitch.php';
require_once 'Request/Request.php';

/**
 * 選手選択コントローラクラス
 * @author admin
 * @link https://www.evernote.com/view/24431dd7-7916-4acf-b18d-3115806a8d6c?locale=ja#n=24431dd7-7916-4acf-b18d-3115806a8d6c
 */
class Components_SelectMember_Controller extends Components
{
	/** ディスプレースイッチＪＡＶＡＳＣＲＩＰＴメソッド名 */
	const JAVASCRIPT_METHOD_NAME_DISPSWITCH = 'gakunenswich';

	/**
	 * テンプレートファイル名
	 *  /application/views/Components/SelectMember/select_member.tpl
	 */
	const TEMPLATE_FILE_NAME = 'select_member.tpl';

	/** 学年選択メニューNAME */
	const GAKUNEN_SELECT_MENU_NAME = 'gakunen';

	/** @var ＨＴＴＰリクエストクラス */
	protected $_objRequest;

	/** @var メンバーデータマッパ */
	protected $_objMapper;
	/** @var 学年選択コンポーネント */
	protected $_objGakunenMenu;
	/** @var メニューメンバー選択コンポーネントトリスト[学年] */
	protected $_objSelectMemberList;

	/** @var メンバー選択メニュー非表示スイッチＪＳコンポーネント */
	protected $_objJsDSwitch;

	/**
	 * コンストラクタ
	 * @param  $sCompileId
	 * @param  $sSchoolType(小学校、中学校、高校)
	 * Ex. 小学校：Models_Players_Controller::JUNIOR_SCHOOL
	 *
	 */
	public function __construct($sCompileId, $sSchoolType)
	{
		parent::__construct(dirname(__FILE__), $sCompileId);
		/*** ＨＴＴＰリクエストクラス */
		$this->_objRequest = new Lib_Request();
		/*** データマッパ */
		$this->_objMapper = new Components_SelectMember_Mapper($SchoolType);
		/***
		 * 表示非表示スイッチＪＳＣ
		 */
		$this->_objJsDSwitch
		= new Smarty_Components_Displayswitch(
				$this->_sCompileDir,
				$sCompileId,
				self::JAVASCRIPT_METHOD_NAME_DISPSWITCH);
		/***
		 * 学年選択メニュー
		 */
		$this->_objGakunenMenu
		= new Components_SelectMember_Gakunen(
				$this->_sCompileId,
				self::GAKUNEN_SELECT_MENU_NAME,
				$aryOptions,
				$Id,
				$sSchoolType);

		$this->_initSelectMember();
	}

	/**
	 * フェッチ(non-PHPdoc)
	 * @see Smarty_Components::fetch()
	 */
	public function fetch()
	{
		/*** タイトル生成 */
		$this->_createTitle();
		/*** ACTUIB生成 */
		$this->_createAction();
		/*** 表示スイッチJAVASCRIPTコンポーネント */
		$sHtml = $this->_objJsDSwitch->fetch('inline');
		$this->view->jsCHDISP = $sHtml;
		/*** 学年選択コンポーネント */
		$sHtml = $this->_objGakunenMenu->fetch();
		$this->view->GAKUNEN_MENU = $sHtml;
		/*** 選手選択メニュー */
		$this->view->MEMBER_MENU = $this->_objSelectMemberList->fetch();

		$sHtml = parent::fetch(self::TEMPLATE_FILE_NAME);
		return $sHtml;
	}

	/**
	 * 選手選択メニュー初期化
	 */
	protected function _initSelectMember()
	{
		/** 初学年年齢取得 */
		$iStartAge = Models_Players_Controller::getStartAge($this->_SchoolType);
		/** 卒業学年取得 */
		$iSotugyoGakunen = Models_Players_Controller::getSotugyoGakunen($this->_SchoolType);

		/***
		 * 選手選択メニューコントローラインスタンス
		*/
		$sCompileDir = $this->_sCompileDir;
		$sCompileId = $this->_sCompileId;
		$this->_objSelectMemberList
		=new Components_SelectMember_Member(
				$sCompileDir,
				$sCompileId,
				$this->_objRequest->get(self::GAKUNEN_SELECT_MENU_NAME)
		);

		$this->_createSelectMenuMemberAllAge($iStartAge, $iSotugyoGakunen);

	}

	/**
	 * 対象年齢のメンバーリスト（OPTIONパラメータ用）を返す
	 * @param $iAge 対象年齢
	 * @return array
	 */
	protected function _createGakunenOption($iAge)
	{
		$aryResult = array();
		$sAge = 'U' . $iAge;
		$aryMemberList = $this->_objMapper->getPlayerList(array($sAge));
		/***
		 * メンバー情報をＯＰＴＩＯＮパラメータに設定する
		 */
		foreach ($aryMemberList as $aryMemberInfo) {
			$aryResult[$aryMemberInfo[Models_Players_Controller::KEY_ID]]
			= $aryMemberInfo[Models_Players_Controller::KEY_NAME];
		}
		return $aryResult;
	}

	/**
	 * 全学年の選手メニューを作成する
	 * @param  $iStartAge 学年開始年齢
	 * @param  $iSotugyoGakunen 卒業学ｊねん
	 * @param  $iPositionNum ポジション番号
	 */
	protected function _createSelectMenuMemberAllAge($iStartAge, $iSotugyoGakunen)
	{
		/***
		 * ＳＥＬＥＣＴコンポーネント定数部事前設定
		*/
		$sCompileDir = $this->_sCompileDir;
		$sCompileId = $this->_sCompileId;
		$sName = Models_Players_Controller::KEY_ID;

		$i = 0;
		/***
		 * 全学年回数
		*/
		while ($i < $iSotugyoGakunen) {
			/*** 年齢変換 */
			$iAge = $iStartAge + $i;
			/** セレクトオプション取得 */
			$aryMemberOptionGakunen = $this->_createGakunenOption($iAge);

			/**
			 * セレクトＨＴＭＬ生成
			 */
			$sSelectName =  'U'.$iAge;
			$objComponentSelect
			= new Smarty_Components_Select($sCompileDir, $sCompileId, $sSelectName, $aryMemberOptionGakunen);
			$htmlSelect = $objComponentSelect->fetch();

			/** ひとがくねんぶん登録 */
			$this->_objSelectMemberList->setHtmlSelectMemberList($i, $sSelectName, $htmlSelect);

			$i ++;
		}
	}

	/**
	 * HTTPリクエストからタイトル文字列を設定する
	 */
	const KEY_TITLE = 'title';
	protected function _createTitle()
	{
		$sTitle = $this->_objRequest->get(self::KEY_TITLE);
		$this->view->TITLE = $sTitle;
	}

	/**
	 * HTTPリクエストからSUBMIT URLを取得する
	 */
	const KEY_DONE = 'done';
	protected function _createAction()
	{
		$sAction = $this->_objRequest->get(self::KEY_DONE);
		$this->view->ACTION = $sAction;
	}
}